package ec.gob.magap.era.dao.impl;

import java.math.BigDecimal;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import ec.gob.magap.era.dao.interfaces.LoginDao;
import ec.gob.magap.era.entities.Recurso;
import ec.gob.magap.era.entities.Usuario;
import ec.gob.magap.era.general.HibernateUtil;

public class LoginDaoImpl implements LoginDao {

	@Override
	public Usuario Login(String nombreUsuario, String clave)
			throws HibernateException {
		Usuario usuario = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();

			session.beginTransaction();
			  Query query = session.createQuery("from Usuario where usuariosistema = :nombreUsuario and clave = :clave");
	          query.setParameter("nombreUsuario", nombreUsuario);
	          query.setParameter("clave", clave);
	          usuario = (Usuario) query.uniqueResult();
	            
			session.getTransaction().commit();
			
			
			return usuario;
		}catch(HibernateException e){
			throw(e);
		}
		
	}

	public List<Recurso> obtenerRecursosUsuario(BigDecimal idUsuario)
			throws HibernateException {
		try{
		String consulta = 
				
				" from Recurso as r  where r.id in ( " +
				" select rr.idrecurso from Rolrecurso as rr where " + 
				" rr.idrol in (" +
				" select rol.id  from Rol as rol " +
				" where rol.id in (select rl.id from Usuario as u, Rol as rl, Rolusuario as  ru " +
				" where rl.id = ru.idusuario " +
				" and u.id = ru.idusuario " +
				" and u.id = " + idUsuario + ") )) " ;
				   
		Session session=HibernateUtil.getSessionFactory().openSession();

		session.beginTransaction();
		Query query = session.createQuery(consulta);
		
		@SuppressWarnings("unchecked")
		List<Recurso> recursos =  (List<Recurso>) query.list();
		session.getTransaction().commit();
		
		return recursos;
		}catch(HibernateException e){
			throw(e);
		}
	}

}
